Inexorable advances in electronics have led to widespread deployment of inexpensive, yet powerful computers that are networked together. Over time, programs installed on these computers are updated and these updates need to be maintained. Information system departments and their users face the thorny task of maintaining numerous instances of software across their complex distributed environments. The maintenance process covers a number of tasks, including software installation, synchronization, backup, recovery, analysis and repair.
A detailed knowledge of a computer's dynamic environment and its system configuration is needed in the maintenance process to prevent situations where modifications to one component may introduce problems in other components. Moreover, an accurate knowledge of the system's configuration is required to verify compatibility and to ensure integrity across multiple operating environments and across diverse processors. Software applications can have numerous components and dependencies and, in a modern network with diverse processors and peripherals, the range of possible configurations can be staggering.
Historically, relationships between software components have been manually detected and component states have been recorded in a log. This state information is external of the components themselves and must be updated whenever the components change. As state information is recorded only at the time of installation, changes made subsequent to installation may be lost. As the rate of change increases and complexity of the software configuration grows, the external state representation becomes difficult to maintain and prone to error. Moreover, during normal operation, users may make changes to the software through individual personalization and through the installation of additional software, thus changing the state information. The difference in state information between software installation and software operation can lead to unpredictable behavior and may require support from information system personnel.